package com.dek.rabbitmq.demo;

import com.dek.rabbitmq.commons.Constants;
import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class RabbitConsumer {

    public static void main(String[] args) throws IOException, TimeoutException, InterruptedException {
        Address[] addresses = new Address[] {
                new Address(Constants.IP_ADDRESS, Constants.PORT)
        };
        ConnectionFactory factory = new ConnectionFactory();
        factory.setUsername("guest");
        factory.setPassword("guest");
        try (Connection connection = factory.newConnection();
             final Channel channel = connection.createChannel()) {
            channel.basicQos(64); // 设置客户端最多接收未被 ack 的消息的个数
            Consumer consumer = new DefaultConsumer(channel) {
                @Override
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,
                                                                                    byte[] body) throws IOException {
                    System.out.println("receive msg " + new String(body));
                    try {
                        TimeUnit.SECONDS.sleep(1);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    channel.basicAck(envelope.getDeliveryTag(), false);
                }
            };
            channel . basicConsume(Constants.QUEUE_NAME, consumer);
            //等待回调函数执行完毕之后 ， 关闭资源
            TimeUnit.SECONDS.sleep(15);
//            channel.close();
//            connection.close();
        }

    }

}
